require(["config"],function(){
	require(["jquery","template","cookie","header","footer" ],function($,template){
		function Cart(){
			this.loadCart();
			// 商品数组
			this.products = null;
			// 商品总数
			this.shop_amount = null
		}
		Cart.prototype = {
			constructor:Cart,
			// load函数
			loadCart:function(){
				console.log("开始购物车");
				$.cookie.json = true;
				// 加载尾部
				//this.loadFooter();
				$.proxy(this.loadFooter(),this);
				// 判断购物车显示内容
				this.footerDisplay();
				
			},
			//判断 购物车显示内容
			footerDisplay:function(){
				var myCartArray= $.cookie("myCart");
				console.log("myCartArray = ", myCartArray);
				// 存在购物车
				if(  myCartArray.length != 0 ){
					$(".empty").css("display","none");
					// 加载购物车
					//console.log(this);
					this.loadFoodCart();
				}else{
					$("table, .option, .total").css("display","none");
				}
			},
			// 显示购物车内容
			loadFoodCart:function(){
				// 匹配数据
				$.ajax("http://rap2api.taobao.org/app/mock/86542/shop")
				 .done($.proxy(this.ajaxProducts, this));
			},
			// ajax加载商品信息
			ajaxProducts:function(datas){
				// 选出cookie信息
				var _ids = $.cookie("myCart") ;
				var result = [];
				
				var data = datas.res_body.data;
				// 遍历匹配
				_ids.forEach(function(curr){
					data.filter(function(curr2){
						if(curr.id == curr2.id){
							// 有使用的rap2接口，数据更新,无法匹配price数据，也无法确定规格
							curr2.lastPrice = curr.price;
							curr2.amount = curr.amount;
							result.push(curr2);
						}
					})
				});
				// 使用template模板
				this.products = {curr: result};
				console.log("lastCookie = ",this.products);
				var html = template("cart_template",this.products );
				console.log("result数组数据 = ",result,"html= ",this.products );
				$("main table tbody").append(html);
				// 添加监听
				this.addCartListener();
			},
			
			// 事件监听
			addCartListener:function(){
				//计算小计
				this.calcTotal()
				console.log("添加事件监听");
				// +-修改
				$("table .amount .decrease,table .amount .increase").on("click",$.proxy(this.decIncHandler,this));
				//直接输入数值，改变数量多少
				$(".amount input").on("focus",$.proxy(this.focusHandler,this) )
				$(".amount input").on("blur",$.proxy(this.blurHandler,this) )
				//点击删除，当行
				$(".table_cart tbody").on("click",".delect_footer",$.proxy(this.delHandler,this) )
				//全选
				$(".all_option").on("click", $.proxy(this.allOptionHandler, this));
				//删除选中项
				$(".delect_some").on("click",$.proxy(this.delectSomeHandler,this));
				//点击复选框
				$(".table_cart tbody").on("click",".checkbox",$.proxy(this.calcTotal,this));
				//商品头部信息
				console.log("$('#good_count') = ",$("#good_count").text(this.products.curr.length) );
			},
			// +- 修改数量
			decIncHandler:function(event){
				console.log("+ - ");
				var src = event.target;
				// 事件源元素所在行(jQuery对象)
				var tr = $(src).parents("tr");
				// 商品 id
				var id = tr.find(".id").text();
				// 商品对
				var product = this.products.curr.filter(function(prod) {
					return prod.id == id;
				})[0];
				// +/-数量
				if ($(src).is(".decrease")) { // -
					if (product.amount <= 1)
						return;
					product.amount--;
				} else { // +
					product.amount++;
				}
				console.log("product = ",product,this.products);
				// 保存到 cookie 中（修改数量后的数组）
				var cookieArr = [];
				var cookieObj = null;
				this.products.curr.forEach(function(curr){
					cookieObj = {
						id : curr.id,
						price:curr.lastPrice,
						amount:curr.amount
					}
					cookieArr.push(cookieObj);
				})
				console.log("cookieArr = ",cookieArr);
				$.cookie("myCart", cookieArr, { path:"/"});

				// 页面渲染
				tr.find(".amount input").val(product.amount);
				tr.find(".allCost i").text(product.amount*product.price);
				
				//计算合计
				this.calcTotal()
			},
			//直接输入商品 数值
			focusHandler:function(){
				//保存旧数量
				this.shop_amount = $(".amount input").val();
			},
			blurHandler:function(){
				var reg = /^[1-9]\d*$/;
				// 判断输入格式正确与否
				if(!reg.test( $(".amount input").val() )){
					$(".amount input").val(this.shop_amount);
				}
			},
			// 删除当前行
			delHandler:function(event){
				console.log("删除当前行 zhong");
				// 获取事件源元素(DOM元素)
				var src = event.target;
				// 获取事件源元素所在行(jQuery对象)
				var tr = $(src).parents("tr");
				// 获取商品 id
				var id = tr.find(".id").text();
				// 从数组中删除该 id 对应的商品对象
				this.products.curr = this.products.curr.filter(function(prod) {
					return !(prod.id == id);
				});
				// 保存到 cookie 中（修改数量后的数组）
				var cookieArr = [];
				var cookieObj = null;
				this.products.curr.forEach(function(curr){
					cookieObj = {
						id : curr.id,
						price:curr.lastPrice,
						amount:curr.amount
					}
					cookieArr.push(cookieObj);
				})
				// 从 cookie 中保存的购物车结构中删除商品数据
				$.cookie("myCart", cookieArr, { path: "/"});
				// 从 DOM 树中删除 DOM 行结构
				tr.remove();

				// 计算合计
				this.calcTotal();
				// 判断是否有购物车商品
				$("#good_count").text(this.products.curr.length)
				if (this.products.curr.length === 0) { // 购物车为空
					$(".empty").css("display","block");
					$("table, .option, .total").css("display","none");
				}
			},
			// 全选handler
			allOptionHandler: function(event){
				//event.preventDefault();
				console.log(" 全选handler",$(".checkbox"));
				$(".checkbox").prop("checked", "checked");
				// 计算合计
				this.calcTotal();
			},
			//删除选中项
			delectSomeHandler:function(){
				 var checks = $(".checkbox:checked") ;
				 // 获取删除元素id
				 var ids = [];
				 checks.each(function() {
					ids.push( $(this).siblings("span").find(".id").text() ) ;
				});
				//修改cookie的数值
				var curr_id = null;
				console.log(this.products.curr)

				this.products.curr = this.products.curr.filter(function(prod) {
					// 循环ids 数组，返回与ids相同prod.id
					ids.forEach(function(curr1){
						// 判断输出
						if(prod.id == curr1){
							curr_id = curr1;
						}
					})
					// 返回剩余的商品id
					return !(prod.id == curr_id);
				});

				// 保存到 cookie 中（修改数量后的数组）
				var cookieArr = [];
				var cookieObj = null;
				this.products.curr.forEach(function(curr){
					cookieObj = {
						id : curr.id,
						price:curr.lastPrice,
						amount:curr.amount
					}
					cookieArr.push(cookieObj);
				})
				// 从 cookie 中保存的购物车结构中删除商品数据
				$.cookie("myCart", cookieArr, { path: "/"});
				// 从 DOM 树中删除 DOM 行结构
				checks.each(function(){
					$(this).parent("td").parent("tr").remove();
				});

				// 计算合计
				this.calcTotal();
				$("#good_count").text(this.products.curr.length);
				// 判断是否有购物车商品
				if (this.products.curr.length === 0) { // 购物车为空
					$(".empty").css("display","block");
					$("table, .option, .total").css("display","none");
				}

			},
			//  计算合计
			calcTotal:function(){
				var checks = $(".checkbox:checked") ;
				var allCost = 0;
				console.log("计算合计 = ",checks, checks.length);
				if(checks.length >0){
					checks.each(function(){
						allCost += parseInt($(this).parent("td").parent("tr").find(".allCost i").text());
					})
					console.log( $("#allCostAmount") );
					$("#allCostAmount").text(allCost.toFixed(2));
				}
				
			},
			// 加载尾部推荐内容
			loadFooter:function(){
				console.log("loadFooter函数")
				$.get("http://rap2api.taobao.org/app/mock/86542/shop",$.proxy(this.footerHandler,this) )
			},
			footerHandler:function(data){
				console.log("footerHandlerk函数");
				var data2={ moreFood:data.res_body.data };
				// 筛选数据
				data2.moreFood = data2.moreFood.slice(3,6);
				// 参数不能使用空格
				console.log(data2,"template模板怎么死的" );
				//var html = template("cart_footer_template",data2);
				var html = ``;
				data2.moreFood.forEach(function(curr){
					html+= `<div class="jingdain">
								<a href="#">
									<span><img src=" ${curr.img} " alt=""></span>
									<div><p> ${curr.cname}</p>
									<label>${curr.name}<i>￥${curr.price}</i></label></div>
								</a>
							</div>`
				})
				$(".wrap-more").append(html);
				// 添加定时器
				var wrapMore = $(".wrap-more");
				var timer = function(){
							if( parseInt(wrapMore.css("left")) <0 ){
								wrapMore.css("left","0");
							}else{
								wrapMore.css("left","-333px");
							}
						};
				var  moreInter = setInterval(timer,3000);
				// 设置鼠标移入，移出事件
				wrapMore.on("mouseenter",function(){
					clearInterval(moreInter);
				})
				wrapMore.on("mouseleave",function(){
					moreInter = setInterval(timer,3000);
				} )//on
			}
		}
		
		new Cart();
	})
})